home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / net / bind-contrib.tar.gz / bind-contrib.tar / contrib / misc / settransfer.shar / ns_maint.c-DIFFS < prev    next >
Encoding:
Text File  |  1996-10-25  |  2.8 KB  |  97 lines

  1. *** ../vixie/named/ns_maint.c    Thu Dec  1 04:38:07 1994
  2. --- ns_maint.c    Thu Dec  1 17:41:57 1994
  3. ***************
  4. *** 90,95 ****
  5. --- 90,99 ----
  6.   
  7.   #define    qserial_qfull()    (qserials_running == MAXQSERIAL)
  8.   
  9. + #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  10. + extern char * getXfer();
  11. + #endif /* SETTRANSFER && !ROUND_ROBIN */
  12.   #ifdef CLEANCACHE
  13.   static time_t cache_time;
  14.   #endif
  15. ***************
  16. *** 268,276 ****
  17. --- 272,309 ----
  18.       struct zoneinfo *zp;
  19.   {
  20.       struct qinfo *qp;
  21. + #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  22. +     int mcntr; /* looping variable */
  23. + #endif /* SETTRANSFER && !ROUND_ROBIN */
  24.   
  25.       dprintf(1, (ddt, "qserial_query(%s)\n", zp->z_origin));
  26.   
  27. + #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  28. +        /* if zp->z_xaddr or zp->z_addr has our own address in it,
  29. +     * then we may be dealing with a ``dynamic'' zone - i.e.
  30. +     * calculating this information via an external program
  31. +     * (e.g. for load balancing benefits).  The serial number
  32. +     * won't change until _after_ we call the zone transfer
  33. +     * program.
  34. +     */
  35. +     dprintf(1, (ddt, "qserial: checking myself\n"));
  36. +     if (zp->z_xaddr.s_addr == netloop.my_addr.s_addr) {
  37. +         dprintf(1, (ddt, "qserial_query(%s) found me.\n",zp->z_origin));
  38. +         addxfer(zp);
  39. +         return;
  40. +     }
  41. +     for (mcntr=0; mcntr < NSMAX; mcntr++) {
  42. +         dprintf(1, (ddt, "qserial_query - checking [%s]\n",
  43. +             inet_ntoa(zp->z_addr[mcntr])));
  44. +         if (zp->z_addr[mcntr].s_addr == netloop.addr) {
  45. +         dprintf(1, (ddt, "qserial_query(%s) found me.\n",zp->z_origin));
  46. +         addxfer(zp);
  47. +         return;
  48. +         }
  49. +     }
  50. + #endif /* SETTRANSFER && !ROUND_ROBIN */
  51.       if (qserial_qfull())
  52.           return;
  53.   
  54. ***************
  55. *** 402,408 ****
  56.               a = zp->z_addr[cnt];
  57.               if (aIsUs(a)
  58.                   && !haveComplained(zp->z_origin,
  59. !                            (char*)startxfer)) {
  60.                   syslog(LOG_ERR,
  61.                      "attempted to fetch zone %s from self (%s)",
  62.                          zp->z_origin, inet_ntoa(a));
  63. --- 435,445 ----
  64.               a = zp->z_addr[cnt];
  65.               if (aIsUs(a)
  66.                   && !haveComplained(zp->z_origin,
  67. !                            (char*)startxfer)
  68. ! #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  69. !                 && (!getXfer(zp->z_origin))
  70. ! #endif /* SETTRANSFER && !ROUND_ROBIN */
  71. !                 ) {
  72.                   syslog(LOG_ERR,
  73.                      "attempted to fetch zone %s from self (%s)",
  74.                          zp->z_origin, inet_ntoa(a));
  75. ***************
  76. *** 442,448 ****
  77. --- 479,494 ----
  78.   
  79.       if (pid == 0) {
  80.           /* child */
  81. + #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  82. +             char * pathXfer;
  83. +         pathXfer = getXfer(zp->z_origin);
  84. +         if (pathXfer != (char *)NULL)
  85. +           execv(pathXfer, argv);
  86. +         else 
  87. +           execv(_PATH_XFER, argv);
  88. + #else /* SETTRANSFER && !ROUND_ROBIN */
  89.           execv(_PATH_XFER, argv);
  90. + #endif /* SETTRANSFER && !ROUND_ROBIN */
  91.           syslog(LOG_ERR, "can't exec %s: %m", _PATH_XFER);
  92.           _exit(XFER_FAIL);    /* avoid duplicate buffer flushes */
  93.       }
  94.